package org.springblade.modules.admin.service.feishu;

import com.alibaba.fastjson.JSONObject;
import com.google.gson.JsonObject;
import com.lark.oapi.Client;
import com.lark.oapi.service.bitable.v1.model.*;
import org.springblade.modules.admin.dto.feishu.FeiShuBatchDTO;
import org.springblade.modules.admin.vo.feishu.FeiShuQueryFieldsVO;

import java.io.File;
import java.util.List;
import java.util.Map;

/**
 * 飞书云文档操作应用接口
 *
 * @author: Sharry
 * @createTime: 2023-12-27 14:05
 * @version: Version-1.0
 */
public interface IFeiShuDocumentService {

	/**
	 * 限制 500 条内的批量新增接口
	 * @param appToken       飞书应用对应文件夹的 token
	 * @param tableId        具体表格 id
	 * @param feiShuBatchDTO 飞书批量 DTO 对象
	 */
	String commandAddBatchLimit(String appToken, String tableId, FeiShuBatchDTO feiShuBatchDTO);

	/**
	 * 限制 500 条内的批量删除接口
	 * @param appToken       飞书应用对应文件夹的 token
	 * @param tableId        具体表格 id
	 * @param feiShuBatchDTO 飞书批量 DTO 对象
	 */
	String commandDeleteBatchLimit(String appToken, String tableId, FeiShuBatchDTO feiShuBatchDTO);

	/**
	 * 限制 500 条内的批量更新接口
	 * @param appToken       飞书应用对应文件夹的 token
	 * @param tableId        具体表格 id
	 * @param feiShuBatchDTO 飞书批量 DTO 对象
	 */
	String commandUpdateBatchLimit(String appToken, String tableId, FeiShuBatchDTO feiShuBatchDTO);

	/**
	 * 通用批量更新接口, 根据 key 比较更新
	 * @param appToken 飞书应用对应文件夹的 token
	 * @param tableId 具体表格 id
	 * @param feiShuBatchDTO 飞书批量 DTO 对象
	 * @param key 比较更新的 key
	 * @return 响应结果
	 */
	String commandCompareUpdateBatch(String appToken, String tableId, FeiShuBatchDTO feiShuBatchDTO, String key);

	/**
	 * 通用批量新增接口
	 *
	 * @param appToken 飞书应用对应文件夹的 token
	 * @param tableId  具体表格 id
	 * @param bodyJson 请求体 bodyJson String 格式
	 * @return 响应结果
	 */
	String commandAddBatch(String appToken, String tableId, String bodyJson);

	/**
	 * 通用批量删除接口
	 *
	 * @param appToken 飞书应用对应文件夹的 token
	 * @param tableId  具体表格 id
	 * @param bodyJson 请求体 bodyJson String 格式
	 * @return 响应结果
	 */
	String commandDeleteBatch(String appToken, String tableId, String bodyJson);

	/**
	 * 通用批量查询接口
	 *
	 * @param appToken 飞书应用对应文件夹的 token
	 * @param tableId  具体表格 id
	 * @param bodyJson 请求体 bodyJson String 格式
	 * @return 响应结果
	 */
	List<JSONObject> commandQueryBatch(String appToken, String tableId, String bodyJson);

	/**
	 * 2024-02-01 开始，飞书云文档查询接口升级为 V2 版本
	 * 通用批量查询接口V2，请求体为空，后续再根据需求考虑条件查询
	 * @param appToken 飞书应用对应文件夹的 token
	 * @param tableId  具体表格 id
	 * @return 响应结果, 响应结果格式有变更
	 */
	List<JSONObject> commandQueryBatchV2(String appToken, String tableId, String bodyJson);

	/**
	 * 通用批量更新接口
	 *
	 * @param appToken 飞书应用对应文件夹的 token
	 * @param tableId  具体表格 id
	 * @param bodyJson 请求体 bodyJson String 格式
	 * @return 响应结果
	 */
	String commandUpdateBatch(String appToken, String tableId, String bodyJson);

	/**
	 * 通用获取所在群组接口
	 */
	List<JSONObject> commandQueryGroupsBatch();

	/**
	 * 群组发送通知
	 */
	String commandSendGroupMessage(String bodyJson);

	/**
	 * 根据key及更新时间去重
	 */
	void commandDistinctByKeyAndUpdateTime(String appToken, String tableId, String key, String updateTime);

	/**
	 * 上传多维表格文档素材
	 */
	String commandUploadDoc(String appToken, String bodyJson, File file);

	/**
	 * 适配飞书云文档查询接口V2
	 * 根据查询结果，作key分析，并封装成map
	 * @param appToken 飞书应用对应文件夹的 token
	 * @param tableId 具体表格 id
	 * @param bodyJson 请求体 bodyJson String 格式
	 * @param textKey 需要提取的key
	 * @return 结果：key为自定义key，value 为 飞书API record_id
	 */
	List<Map<String,String>> commandGetTextKeys(String appToken, String tableId, String bodyJson, String textKey);

	/**
	 * 通用发送群组消息，方法重载
	 * @param appToken 飞书应用对应文件夹的 token
	 * @param tableId 具体表格 id
	 * @param message 消息内容
	 */
	void commandSendGroupMessage(String appToken, String tableId, String message);

	/**
	 * 飞书 多维表格 查询记录
	 * @param client 飞书客户端
	 * @param appToken 飞书应用对应文件夹的 token
	 * @param tableId 具体表格 id
	 * @param searchAppTableRecordReqBody 查询条件
	 * @param pageToken 分页token
	 * @return 分页查询结果
	 */
	SearchAppTableRecordResp getRecordsByCondition(Client client, String appToken, String tableId, SearchAppTableRecordReqBody searchAppTableRecordReqBody, String pageToken);


	/**
	 * @param client 飞书客户端
	 * @param updateReq 批量更新请求
	 * @return 批量更新结果
	 */
	BatchUpdateAppTableRecordResp updateRecordsBatch(Client client, BatchUpdateAppTableRecordReq updateReq);

	/**
	 * 通用 批量新增接口，根据 key 比较新增
	 * @param appToken 飞书应用对应文件夹的 token
	 * @param tableId 具体表格 id
	 * @param feiShubatchDTO 飞书批量 DTO 对象
	 * @param key 比较新增的 key
	 * @return 响应结果
	 */
	String commandCompareAddBatch(String appToken, String tableId, FeiShuBatchDTO feiShubatchDTO, String key);

	/**
	 * 通用覆盖接口，先删除全表后新增
	 */
	String commandCoverBatch(String appToken, String tableId, FeiShuBatchDTO feiShuBatchDTO);
}
